home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / pc / LOGIC Apple II 5.25" Library - DOS Part 3 / DOS064.dsk / MATRIX MAKER.bas < prev    next >
BASIC Source File  |  2012-02-16  |  16KB  |  395 lines

  1. 10  TEXT 
  2. 20  GOTO 1010
  3. 95  REM   --------------------
  4. 96  REM          TOTALS       
  5. 97  REM   --------------------
  6. 100  PRINT : FLASH : PRINT "<CTRL-G><CTRL-G><CTRL-G>CALCULATING TOTALS NOW ": NORMAL : PRINT 
  7. 110  REM  ----- COLUMNS ..
  8. 120  FOR X = 1 TO C:T = 0: FOR Y = 1 TO R:T = T +A(Y,X): NEXT Y:A(0,X) = T: NEXT X
  9. 130  REM  ----- ROWS ...
  10. 140  FOR Y = 1 TO R:TT = 0: FOR X = 1 TO C:TT = TT +A(Y,X): NEXT X:A(Y,0) = TT: NEXT Y
  11. 150  REM  ----- TOTAL COLUMN
  12. 160 T = 0: FOR Y = 1 TO R:T = T +A(Y,0): NEXT Y
  13. 170  REM  ----- TOTAL ROW
  14. 180 TT = 0: FOR X = 1 TO C:TT = TT +A(0,X): NEXT X
  15. 190  REM  ----- CHECK BALANCE
  16. 200  IF T = TT  THEN  GOTO 250
  17. 210  INVERSE : PRINT "TOTALS OUT OF BALANCE": NORMAL 
  18. 220  PRINT "COLUMN TOTAL = ";T
  19. 230  PRINT "ROW TOTAL =    ";TT
  20. 240  INPUT "TO CONTINUE PRESS RETURN ";Q$
  21. 250 A(0,0) = T
  22. 260  GOTO 2000
  23. 298  REM  --------------------
  24. 299  REM   ENTER ROUTINE
  25. 300  REM  --------------------
  26. 305  IF R <1  AND C <1  THEN  GOTO 8200
  27. 310  HOME : VTAB 5: PRINT "HOW DO YOU WANT TO ENTER DATA. "
  28. 320  PRINT : HTAB 5: PRINT "1. A COLUMN AT A TIME"
  29. 330  PRINT : HTAB 5: PRINT "2. A ROW AT A TIME"
  30. 340  PRINT : HTAB 5: PRINT "3. A SPECIFIC ROW AND COLUMN"
  31. 350  PRINT : HTAB 5: PRINT "4. RETURN TO MENU"
  32. 360  PRINT : PRINT : PRINT "ENTER NUMBER ==> ";: GET Q$
  33. 365 Q =  INT( VAL(Q$))
  34. 370  IF Q <1  OR Q >4  THEN  GOTO 310
  35. 380  ON Q GOTO 500,750,450,2000
  36. 420  REM  ----- SPECIFIC ENTRY
  37. 450  PRINT : PRINT : PRINT : INPUT "ENTER THE ROW NUMBER ";Q$
  38. 460 A1 =  INT( VAL(Q$)):A1 = (R +1) -A1: IF A1 <0  OR A1 >R  THEN  GOTO 450
  39. 470  PRINT : INPUT "ENTER THE COLUMN NUMBER ";Q$
  40. 480 A2 =  INT( VAL(Q$)):A2 = (C +1) -A2: IF A2 <0  OR A2 >C  THEN  GOTO 470
  41. 485  PRINT "OLD VALUE = ";A(A1,A2)
  42. 490  PRINT : INPUT "ENTER THE NEW VALUE ";Q$
  43. 495 Q =  VAL(Q$):Q =  FN A(Q):A(A1,A2) = Q: GOTO 100
  44. 497  REM  ----------------
  45. 498  REM   ENTER BY COLUMN
  46. 499  REM  ----------------
  47. 500  HOME : INVERSE : FOR I = 1 TO 3: PRINT BL$: NEXT I: VTAB 2: HTAB 10: PRINT "ENTER DATA BY COLUMN": NORMAL 
  48. 510  PRINT : FOR X = C TO 1  STEP  -1
  49. 515  VTAB 5: CALL  -958
  50. 520 T = 0: PRINT "ENTER COLUMN - ";C$(X): PRINT 
  51. 530  FOR Y = R TO 1  STEP  -1
  52. 535  IF Y <10  THEN  PRINT " ";
  53. 540  PRINT R$(Y);" = ";A(Y,X);" ==> ";
  54. 550  INPUT Q$
  55. 560  IF  LEN(Q$) = 0  THEN  GOTO 590
  56. 570  IF Q$ = "E"  THEN  GOTO 2000
  57. 580 Q =  VAL(Q$):A(Y,X) =  FN A(Q)
  58. 590 T = T +A(Y,X): NEXT Y
  59. 600  PRINT : PRINT "ROW TOTAL = ";T: PRINT 
  60. 610  GOSUB 940
  61. 620  IF Q$ < > CHR$(13)  THEN  GOTO 515
  62. 630  NEXT X
  63. 640  GOTO 100
  64. 747  REM  -----------------
  65. 748  REM   ENTER BY ROW
  66. 749  REM  -----------------
  67. 750  HOME : INVERSE : FOR I = 1 TO 3: PRINT BL$: NEXT I: VTAB 2: HTAB 10: PRINT "ENTER DATA BY ROW": NORMAL 
  68. 760  FOR Y = R TO 1  STEP  -1
  69. 765  VTAB 5: CALL  -958
  70. 770 T = 0: PRINT "ENTER ROW - ";R$(Y): PRINT 
  71. 780  FOR X = C TO 1  STEP  -1
  72. 785  IF X <10  THEN  PRINT " ";
  73. 790  PRINT C$(X);" = ";A(Y,X);" ==> ";
  74. 800  INPUT Q$
  75. 810  IF  LEN(Q$) = 0  THEN  GOTO 850
  76. 830  IF Q$ = "E"  THEN  GOTO 2000
  77. 840 Q =  VAL(Q$):A(Y,X) =  FN A(Q)
  78. 850 T = T +A(Y,X): NEXT X
  79. 860  PRINT : PRINT "COLUMN  TOTAL = ";T: PRINT 
  80. 870  GOSUB 940
  81. 880  IF Q$ < > CHR$(13)  THEN  GOTO 765
  82. 890  NEXT Y
  83. 900  GOTO 100
  84. 910  REM  ----------------
  85. 915  FOR I = 1 TO SZ: PRINT "-";: NEXT I: PRINT : PRINT : RETURN 
  86. 920  REM  ----------------
  87. 940  PRINT "IF TOTAL O.K. THEN PRESS RETURN         IF TOTAL NOT O.K. THEN PRESS ANY KEY    TO REENTER FIGURES.":
  88. 945  GET Q$
  89. 950  IF Q$ = "E"  THEN  POP : GOTO 2000
  90. 955  RETURN 
  91. 997  REM  -----------------
  92. 998  REM      INITIALIZE
  93. 999  REM  -----------------
  94. 1000  REM 
  95. 1010 D$ =  CHR$(4): REM  CTRL D
  96. 1020 BL$ = "                                       "
  97. 1030 BX$ = "[ ] "
  98. 1040 M$(7) = "INSTRUCTIONS":M$(2) = "CREATE MATRIX":M$(3) = "ENTER MATRIX DATA":M$(4) = "VIEW MATRIX DISPLAY"
  99. 1050 M$(1) = "LOAD MATRIX":M$(5) = "SAVE MATRIX":M$(6) = "PRINT MATRIX":M$(8) = "END PROGRAM"
  100. 1060 DD$ = "  TOT  SAT  FRI  THU  WED  TUE  MON  SUN"
  101. 1070 MD$ = "  TOT  DEC  NOV  OCT  SEP  AUG  JUL  JUN  MAY  APR  MAR  FEB  JAN"
  102. 1080  DEF  FN A(X) =  INT(X *100 +.5)/100
  103. 1090 AL$ =  CHR$(8):AR$ =  CHR$(21)
  104. 1100  GOTO 8280
  105. 1110  REM  REMOVE 1100 TO HAVE MENU
  106. 1120  REM  DISPLAY FIRST
  107. 1997  REM  -----------------
  108. 1998  REM       MENU ROUTINE
  109. 1999  REM  -----------------------
  110. 2000  TEXT : HOME : INVERSE : FOR I = 1 TO 3: PRINT BL$: NEXT I: VTAB 2: HTAB 10: PRINT " SELECT OPTION": NORMAL 
  111. 2005  POKE  -16368,0
  112. 2010  VTAB 6
  113. 2030  FOR I = 1 TO 8: HTAB 4
  114. 2033  IF I = 1  AND CS = 1  THEN  PRINT  LEFT$(BL$,15): GOTO 2039
  115. 2034  IF I = 2  AND LS = 1  THEN  PRINT  LEFT$(BL$,15): GOTO 2039
  116. 2035  IF I = 1  AND LS = 1  THEN  PRINT "    ";N$;" MATRIX HAS BEEN LOADED": GOTO 2039
  117. 2036  IF I = 2  AND CS = 1  THEN  PRINT "     A MATRIX HAS BEEN CREATED": GOTO 2039
  118. 2037  PRINT BX$;M$(I)
  119. 2039  PRINT : NEXT I
  120. 2040  VTAB 23: PRINT "(SELECT = RETURN KEY / MOVE = ANY KEY)"
  121. 2050 P = 6
  122. 2055  IF CS = 1  OR LS = 1  THEN P = 10
  123. 2060  VTAB P: HTAB 5: GET Q$
  124. 2070  IF Q$ =  CHR$(13)  THEN  GOTO 2110
  125. 2080 P = P +2: IF P =  >22  THEN  GOTO 2050
  126. 2090  GOTO 2060
  127. 2100  REM  CHECK FOR ROUTINE
  128. 2110  IF P = 6  THEN  GOTO 8100: REM  LOAD
  129. 2115  IF P = 8  THEN  GOTO 7000: REM  CREATE
  130. 2116  IF P = 10  THEN  GOTO 300: REM  ENTER
  131. 2117  IF P = 12  THEN  GOTO 3000: REM  VIEW
  132. 2120  IF P = 14  THEN  GOTO 8000: REM  SAVE
  133. 2125  IF P = 16  THEN  GOTO 3500: REM  PRINT
  134. 2126  IF P = 18  THEN  GOTO 8280: REM   INSTRUCTIONS
  135. 2130  IF P = 20  THEN  GOTO 9998: REM  END
  136. 2190  GOTO 2080
  137. 2997  REM ----------------
  138. 2998  REM  VIEW ROUTINE
  139. 2999  REM ----------------
  140. 3000 C1 = C
  141. 3005  IF R <1  AND C <1  THEN  GOTO 8200
  142. 3010  IF C1 <2  THEN C1 = 2
  143. 3020  IF C1 >C  THEN C1 = C
  144. 3030 Y = C -C1
  145. 3040  HOME : VTAB 2: HTAB 11: PRINT C$(Y +2);: HTAB 21: PRINT C$(Y +1);
  146. 3050  IF Y = 0  THEN  INVERSE 
  147. 3060  HTAB 32: PRINT " ";C$(Y): NORMAL : PRINT 
  148. 3070  FOR X = R TO 0  STEP  -1
  149. 3075  IF X = 0  THEN  INVERSE : PRINT 
  150. 3076  FOR Z = 0 TO 2:N = A(X,Y +Z): GOSUB 3200: NEXT Z
  151. 3080  PRINT R$(X);: HTAB 9: PRINT NU$(2);: HTAB 19: PRINT NU$(1);
  152. 3090  IF Y = 0  THEN  INVERSE 
  153. 3100  HTAB 30: PRINT NU$(0): NORMAL 
  154. 3110  IF R <9  THEN  PRINT 
  155. 3120  NEXT X
  156. 3130  VTAB 21: PRINT "TO CHANGE COLUMNS USE ==><== KEYS": PRINT "TO  RETURN  TO MENU USE 'ESC' KEY"
  157. 3140  GET Q$: PRINT : IF Q$ =  CHR$(27)  THEN  GOTO 2000
  158. 3150  IF Q$ = AR$  THEN C1 = C1 +3
  159. 3160  IF Q$ = AL$  THEN C1 = C1 -3
  160. 3170  GOTO 3010
  161. 3200 NU$(Z) =  RIGHT$(BL$ + STR$( INT(N +.005)) +"." + RIGHT$( STR$( INT((N +100) *100 +.5)),2),10)
  162. 3210  IF  RIGHT$(NU$(Z),2) = "00"  THEN NU$(Z) =  LEFT$(NU$(Z),7) +"   "
  163. 3220  RETURN 
  164. 3497  REM  ----------------------
  165. 3498  REM      PRINTER ROUTINE 
  166. 3499  REM  ----------------------
  167. 3500  HOME 
  168. 3505  IF R <1  AND C <1  THEN  GOTO 8200
  169. 3510  PRINT : FLASH : PRINT " WARNING ";: NORMAL 
  170. 3520  POKE 33,30: POKE 32,10: HTAB 11
  171. 3525  PRINT 
  172. 3530  PRINT "THIS PRINTING ROUTINE IS      DESIGNED TO WORK WITH A 80    COLUMN PRINTER. (SILENTYPE)"
  173. 3535  PRINT 
  174. 3540  PRINT "IF YOUR PRINTER IS DIFFERENT  THIS ROUTINE MAY NOT PRODUCE  PROPER RESULTS."
  175. 3545  PRINT 
  176. 3550  PRINT "THE NUMBER OF COLUMNS PRINTED IS LIMITED BY THE SIZE OF THE  FIELDS IN YOUR MATRIX.
  177. 3555  PRINT 
  178. 3560  PRINT "(MAX= 4 CHAR FLD.= 14 COLUMNS)
  179. 3580  TEXT : PRINT "PRESS ANY KEY TO CONTINUE";: GOSUB 945
  180. 3600  HOME : PRINT : PRINT "ENTER A TITLE YOU WANT PRINTED AS       A HEADING ON THE PRINTOUT."
  181. 3610  INPUT "==> ";T$: IF  LEN(T$) = 0  THEN T$ = "MATRIX"
  182. 3620  IF  LEN(T$) >75  THEN  GOTO 3600
  183. 3630  PRINT : PRINT : PRINT 
  184. 3640  PRINT "CHOOSE THE TYPE OF ROUNDING YOU WANT.": PRINT 
  185. 3645  PRINT "(NUMBER OF DECIMAL PLACES)
  186. 3650  PRINT "A = 12345.67"
  187. 3652  PRINT "B = 12345.8 "
  188. 3654  PRINT "C = 12346.  "
  189. 3656  PRINT "D = 12350.  "
  190. 3658  PRINT "E = 12300.  "
  191. 3660  GET Q$: PRINT 
  192. 3665  IF Q$ <"A"  OR Q$ >"E"  THEN  GOTO 3660
  193. 3670  IF Q$ = "A"  THEN R1 = 100
  194. 3672  IF Q$ = "B"  THEN R1 = 10
  195. 3674  IF Q$ = "C"  THEN R1 = 1
  196. 3676  IF Q$ = "D"  THEN R1 = .1
  197. 3678  IF Q$ = "E"  THEN R1 = .01
  198. 3680  DEF  FN B(X) =  INT(X *R1 +.5)/R1
  199. 3700 N =  FN B(A(0,0)):NU$ =  STR$(N)
  200. 3710 PL =  LEN(NU$)
  201. 3713  IF PL <3  THEN PL = 3
  202. 3715 NC = PL +1
  203. 3720  IF NC <5  THEN NC = 5
  204. 3725  IF NC *(C +1) >70  THEN  GOTO 4100
  205. 3730  IF NC >10  THEN NC = 10
  206. 3740 SZ = ((C +1) *NC) +10: IF SZ >80  THEN SZ = 80
  207. 3745  REM  ------------
  208. 3746  REM   BEGIN PRINTING
  209. 3747  REM  ------------
  210. 3748  HOME : VTAB 10: HTAB 6: FLASH : PRINT "NOW PRINTING THE MATRIX ": NORMAL 
  211. 3750  PR# 1: POKE  -12528,7: POKE  -12527,1: POKE  -12526,81: POKE  -12529,0: POKE  -12530,2: VTAB 1
  212. 3760  POKE 36, INT((SZ - LEN(T$))/2): PRINT T$: PRINT 
  213. 3800  GOSUB 915
  214. 3810 T = 9 +(NC - LEN(C$(C))): POKE 36,T
  215. 3820  FOR X = C TO 0  STEP  -1: PRINT C$(X);:T = T +NC: POKE 36,T: NEXT X: PRINT : GOSUB 915
  216. 3830  FOR X = R TO 0  STEP  -1
  217. 3835  IF X = 0  THEN  GOSUB 915
  218. 3840  PRINT R$(X);
  219. 3850 T = 10: POKE 36,T
  220. 3855  FOR Y = C TO 0  STEP  -1
  221. 3860 N =  FN B(A(X,Y)):NU$ =  RIGHT$("          " + STR$(N),PL)
  222. 3865  PRINT NU$;:T = T +NC: IF Y = 0  THEN T = T +1
  223. 3868  POKE 36,T: NEXT Y: PRINT 
  224. 3870  PRINT : VTAB 1: NEXT X: PRINT : PRINT 
  225. 3890  PR# 0
  226. 3895  HOME : GOTO 2000
  227. 4100  INVERSE : PRINT " POTENTIAL ERROR <CTRL-G><CTRL-G><CTRL-G>"
  228. 4105  PRINT 
  229. 4110  NORMAL : PRINT "DATA FIELDS ARE TOO LARGE AND THE       REPORT FORMAT WILL BE MESSED UP."
  230. 4120  PRINT : PRINT "DO YOU WANT TO CONTINUE PRINTING ANYWAY"
  231. 4125  PRINT "(ENTER Y OR N)"
  232. 4130  PRINT : GET Q$: PRINT 
  233. 4140  IF Q$ = "Y"  THEN  GOTO 3740
  234. 4150  GOTO 2000
  235. 6997  REM  ---------------------
  236. 6998  REM     CREATE ROUTINE
  237. 6999  REM  ---------------------
  238. 7000  IF CS = 1  THEN  GOTO 7675
  239. 7010 CS = 1
  240. 7020  TEXT : HOME : INVERSE : PRINT  LEFT$(BL$,20): PRINT "    CREATE MATRIX   ": PRINT  LEFT$(BL$,20): NORMAL : VTAB 3
  241. 7030  HTAB 27: PRINT "STANDARD": HTAB 28: PRINT "FORMAT":
  242. 7040  PRINT : HTAB 28: PRINT "COLUMNS": HTAB 27: PRINT "A B C...";: FLASH : PRINT "X";: NORMAL : PRINT " TOT"
  243. 7050  GOSUB 7720
  244. 7060  HTAB 24: PRINT "1  0 0 0   0  0"
  245. 7070  PRINT 
  246. 7080  HTAB 24: PRINT "2  0 0 0   0  0"
  247. 7090  HTAB 22: PRINT "R"
  248. 7100  HTAB 22: PRINT "O 3  0 0 0   0  0"
  249. 7110  HTAB 22: PRINT "W ."
  250. 7120  HTAB 22: PRINT "S ."
  251. 7130  HTAB 24: PRINT "."
  252. 7140  HTAB 24: FLASH : PRINT "Y";: NORMAL : PRINT "  0 0 0   0  0"
  253. 7150  GOSUB 7720
  254. 7160  HTAB 22: PRINT "TOT  0 0 0   0  0"
  255. 7170  GOSUB 7720
  256. 7180  POKE 33,20: VTAB 5: HTAB 1
  257. 7190  PRINT "DESIGN YOUR OWN BY"
  258. 7200  PRINT "ENTERING A CODE OR"
  259. 7210  PRINT "THE MATRIX SIZE"
  260. 7220  VTAB 10: PRINT "NUMBER OF COLUMNS"
  261. 7230  PRINT "  (S=MONTHS X 10)"
  262. 7231  PRINT "  (W=DAYS X 10)"
  263. 7232  PRINT "  (M=MONTHS)    
  264. 7233  PRINT "  (D=DAYS OF WK)"
  265. 7234  PRINT "  (?=ANY NUMBER)"
  266. 7235  PRINT 
  267. 7240  INVERSE : PRINT " X = ";: NORMAL 
  268. 7250  INPUT " ";Q$: PRINT 
  269. 7255  IF Q$ = "E"  THEN CS = 0: GOTO 2000
  270. 7260  IF Q$ = "S"  THEN  GOTO 7730
  271. 7270  IF Q$ = "W"  THEN  GOTO 7740
  272. 7280  IF Q$ = "M"  THEN  GOTO 7680
  273. 7290  IF Q$ = "D"  THEN  GOTO 7700
  274. 7300 C =  VAL(Q$)
  275. 7310  IF C <1  OR C >52  THEN  GOTO 7240
  276. 7320  DIM C$(C)
  277. 7325  GOSUB 7480
  278. 7327  HOME 
  279. 7330  PRINT : PRINT "NUMBER OF ROWS"
  280. 7340  PRINT "  (M=MONTHS)"
  281. 7341  PRINT "  (D=DAYS)"
  282. 7342  PRINT "  (?=ANY NUMBER)
  283. 7345  PRINT 
  284. 7350  INVERSE : PRINT " Y = ";: NORMAL 
  285. 7360  INPUT " ";Q$: PRINT 
  286. 7365  GOSUB 950
  287. 7370  IF Q$ = "M"  THEN  GOTO 7690
  288. 7380  IF Q$ = "D"  THEN  GOTO 7710
  289. 7390 R =  VAL(Q$)
  290. 7400  IF R <1  OR R >52  THEN  GOTO 7330
  291. 7410  DIM R$(R)
  292. 7420  GOSUB 7590
  293. 7430  GOTO 7670
  294. 7480  PRINT : PRINT "ENTER COLUMN TITLES"
  295. 7490  PRINT "(LIMIT TO 8 CHAR.)"
  296. 7500  PRINT : FOR X = C TO 1  STEP  -1
  297. 7510 A$ =  CHR$(C -(X -1) +64)
  298. 7520  PRINT "COLUMN #";A$;" ";: INPUT "";Q$
  299. 7530  IF  LEN(Q$) <1  OR  LEN(Q$) >8  THEN  GOTO 7520
  300. 7540 C$(X) = Q$
  301. 7550  NEXT X
  302. 7560 C$(0) = " TOT "
  303. 7570  RETURN 
  304. 7590  PRINT : PRINT "ENTER ROW TITLES"
  305. 7600  PRINT "(LIMIT TO 8 CHAR.)"
  306. 7610  PRINT : FOR X = R TO 1  STEP  -1
  307. 7620  PRINT "   ROW #";R -(X -1);" ";: INPUT "";Q$
  308. 7630  IF  LEN(Q$) <1  OR  LEN(Q$) >8  THEN  GOTO 7620
  309. 7640 R$(X) = Q$
  310. 7650  NEXT X
  311. 7660 R$(0) = " TOT "
  312. 7665  RETURN 
  313. 7670 N$ = "CREATED"
  314. 7673  DIM A(R,C)
  315. 7675  TEXT : HOME : VTAB 10: PRINT "  MATRIX CREATED ": GOTO 8160
  316. 7680 Z = 1:C = 12: DIM C$(C): FOR X = 0 TO 12:C$(X) =  MID$ (MD$,Z,5):Z = Z +5: NEXT X: GOTO 7330
  317. 7690 Z = 1:R = 12: DIM R$(R): FOR X = 0 TO 12:R$(X) =  MID$ (MD$,Z,5):Z = Z +5: NEXT X: GOTO 7670
  318. 7700 Z = 1:C = 7: DIM C$(C): FOR X = 0 TO 7:C$(X) =  MID$ (DD$,Z,5):Z = Z +5: NEXT X: GOTO 7330
  319. 7710 Z = 1:R = 7: DIM R$(R): FOR X = 0 TO 7:R$(X) =  MID$ (DD$,Z,5):Z = Z +5: NEXT X: GOTO 7670
  320. 7720  HTAB 26: FOR C = 26 TO 39: PRINT "-";: NEXT C: PRINT : RETURN 
  321. 7730 R = 10:C = 12: DIM R$(R),C$(C):Z = 1: FOR X = 0 TO 12:C$(X) =  MID$ (MD$,Z,5):Z = Z +5: NEXT X: FOR Y = 10 TO 1  STEP  -1:A = (R -(Y -1)):R$(Y) =  RIGHT$("        " + STR$(A),5): NEXT Y:R$(0) = "  TOTAL  ": GOTO 7670
  322. 7740 R = 10:C = 07: DIM R$(R),C$(C):Z = 1: FOR X = 0 TO 07:C$(X) =  MID$ (DD$,Z,5):Z = Z +5: NEXT X: FOR Y = 10 TO 1  STEP  -1:A = (R -(Y -1)):R$(Y) =  RIGHT$("        " + STR$(A),5): NEXT Y:R$(0) = "  TOTAL ": GOTO 7670
  323. 7997  REM  --------------------
  324. 7998  REM      SAVE MATRIX 
  325. 7999  REM   ---------------------
  326. 8000  HOME : VTAB 5
  327. 8003  IF R <1  AND C <1  THEN  GOTO 8200
  328. 8005  INPUT "ENTER THE NAME OF THE MATRIX  ";N$: IF N$ = "E"  THEN  GOTO 2000
  329. 8006  VTAB 10: PRINT "SAVING THE ";N$;" MATRIX ON DISK"
  330. 8010  PRINT D$;"OPEN MM-";N$
  331. 8012  PRINT D$;"WRITE MM-";N$
  332. 8015  PRINT C: PRINT R
  333. 8020  FOR I = 0 TO C: PRINT C$(I): NEXT I
  334. 8030  FOR I = 0 TO R: PRINT R$(I): NEXT I
  335. 8035  FOR Y = 0 TO R: FOR X = 0 TO C
  336. 8040  PRINT A(Y,X)
  337. 8045  NEXT X,Y
  338. 8050  PRINT D$;"CLOSE MM-";N$
  339. 8053  PRINT D$;"LOCK MM-";N$
  340. 8055  VTAB 15: PRINT "MATRIX HAS BEEN SAVED AND LOCKED."
  341. 8060  GOTO 8160
  342. 8097  REM   --------------------
  343. 8098  REM      LOAD ROUTINE
  344. 8099  REM   ---------------------
  345. 8100  HOME : VTAB 5
  346. 8103  IF LS = 1  THEN  GOTO 8155
  347. 8104  IF  LEN(N$) >0  THEN  GOTO 8155
  348. 8105  INPUT "ENTER THE NAME OF THE MATRIX ";N$: IF N$ = "E"  THEN  GOTO 2000
  349. 8106  IF  LEN(N$) = 0  THEN  GOTO 2000
  350. 8107 LS = 1
  351. 8108  VTAB 10: PRINT "LOADING THE ";N$;" MATRIX"
  352. 8110  PRINT D$;"OPEN MM-"N$: PRINT D$;"READ MM-";N$
  353. 8115  INPUT C,R
  354. 8116  DIM A(R,C),R$(R),C$(C)
  355. 8120  FOR I = 0 TO C: INPUT C$(I): NEXT I
  356. 8130  FOR I = 0 TO R: INPUT R$(I): NEXT I
  357. 8135  FOR Y = 0 TO R: FOR X = 0 TO C
  358. 8140  INPUT A(Y,X)
  359. 8145  NEXT X,Y
  360. 8150  PRINT D$;"CLOSE MM-";N$
  361. 8155  VTAB 15: PRINT "THE ";N$;" MATRIX HAS BEEN LOADED."
  362. 8160  VTAB 20: PRINT "PRESS ANY KEY TO CONTINUE ";: GET Q$: PRINT 
  363. 8170  GOTO 2000
  364. 8200  HOME : VTAB 05: INVERSE : PRINT "<CTRL-G><CTRL-G><CTRL-G>  NOTICE  ": NORMAL : PRINT : PRINT " THIS OPTION IS NOT USABLE UNTIL": PRINT "A MATRIX HAS BEEN CREATED OR LOADED.    "
  365. 8205  VTAB 10: PRINT "TO SEE HOW THIS OPTION WORKS YOU MAY    LOAD THE ' TEST ' MATRIX AND            THEN TRY IT AGAIN."
  366. 8210  VTAB 20: PRINT "PRESS ANY KEY TO RETURN TO THE MENU";: GET Q$: GOTO 2000
  367. 8280  PRINT D$
  368. 8281  REM   INSTRUCTIONS
  369. 8285  FOR I = 1 TO 9: HOME 
  370. 8290  PRINT  CHR$(4);"BLOAD CARD";I: VTAB 23: PRINT "PRESS ANY KEY TO CONTINUE";: GET Q$: PRINT 
  371. 8300  IF Q$ = "E"  THEN I = 9
  372. 8310  NEXT I
  373. 8320  GOTO 2000
  374. 9991  REM  ------------------
  375. 9992  REM    END OF JOB
  376. 9993  REM  ------------------
  377. 9995  PRINT "*<CTRL-G>*<CTRL-G>*<CTRL-G> DISK ERROR ***": GOTO 9999
  378. 9998  HOME 
  379. 9999  INVERSE : VTAB 20: PRINT " THE END  ": NORMAL : LIST 10000,10004: END 
  380. 10000  REM ---------------------
  381. 10001  REM  TO RESTART WITHOUT
  382. 10002  REM  LOSING THE MATRIX
  383. 10003  REM  TYPE "GOTO 2000"
  384. 10004  REM ---------------------
  385. 21000  REM ********************
  386. 21001  REM *                  *
  387. 21002  REM *   DESIGNED AND   *
  388. 21003  REM *                  *
  389. 21004  REM *    WRITTEN BY    *
  390. 21005  REM *                  *
  391. 21006  REM * RICHARD LUNDEEN  *
  392. 21007  REM *                  *
  393. 21008  REM *     OCT 1980     *
  394. 21009  REM *                  *
  395. 21010  REM ********************